local key = KEYS[1]
local threadId = ARGV[1]
local releaseTime = ARGV[2]
-- 判断当前锁是否自己持有
if(redis.call('hexists', key, threadId) == 0) then
  -- 不是自己持有则直接返回
  return nil;
end;
-- 是自己的锁，则重入次数减一
local count = redis.call('hincrby', key, threadId, -1);

-- 判断重入次数是否已经为0
if(count > 0) then
  -- 如果大于0，则不能释放锁，重置有效期然后返回
  redis.call('expire', key, releaseTime);
  return nil;
else
  -- 等于0，则说明可以直接删除，释放锁
  redis.call('del', key)
  return nil;
end;


